package ai.people.platform.archives.service;

import ai.people.netmon.framework.domain.archives.entity.Clue;
import ai.people.netmon.framework.domain.archives.entity.ClueUserAssociation;
import ai.people.netmon.framework.domain.archives.request.ClueListRequest;
import ai.people.netmon.framework.domain.archives.request.ClueShareRequest;
import ai.people.netmon.framework.domain.archives.request.ClueSharedRecordListRequest;
import ai.people.netmon.framework.domain.archives.vo.ClueListVO;
import ai.people.netmon.framework.domain.archives.vo.ClueSharedRecordListVO;
import ai.people.netmon.framework.domain.system.vo.NmSystemUserSimpleVO;
import ai.people.netmon.framework.model.response.ListResponse;
import ai.people.netmon.framework.model.response.PageResponse;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhenglin
 * @since 2022-05-31
 */
public interface ClueService extends IService<Clue> {

    /**
     * 线索列表(用户)
     *
     * @param request 请求
     * @return {@link PageResponse}<{@link ClueListVO}>
     */
    PageResponse<ClueListVO> myClueList(ClueListRequest request);

    /**
     * 线索列表(管理员)
     *
     * @param request 请求
     * @return {@link PageResponse}<{@link ClueListVO}>
     */
    PageResponse<ClueListVO> adminClueList(ClueListRequest request);

    /**
     * 新增线索
     *
     * @param archivesId 档案id
     */
    void addClue(Long archivesId);

    /**
     * 分享线索
     *
     * @param request 协会
     */
    void shareClue(ClueShareRequest request);

    /**
     * 线索动作记录列表
     *
     * @param request 请求
     * @return {@link List}<{@link ClueSharedRecordListVO}>
     */
    PageResponse<ClueSharedRecordListVO> sharedRecord(ClueSharedRecordListRequest request);

    /**
     * 分享用户列表
     *
     * @param clueId 线索id
     * @return {@link ListResponse}<{@link NmSystemUserSimpleVO}>
     */
    ListResponse<NmSystemUserSimpleVO> shareUserList(Long clueId);

    /**
     * 分享线索检查
     *
     * @param association 协会
     * @return boolean
     */
    boolean shareClueCheck(ClueShareRequest association);


}
